// for class based (OO) access to player functions

#pragma once
#include <windows.h>

#include "../../ScriptHook/ScriptingTypes.h"
#include "../../ScriptHook/Scripting.h"
#include "../ScriptingTypes.h"
#include "../ScriptingEnums.h"
#include "../Log.h"
#include "Ped.h"


namespace GTA
{
	public ref class Player : Ped
	{
	private:
		Scripting::Player _player;
	public:
		Player::Player();
		Player::Player(Scripting::Player pl);
		//Player::~Player() {delete _player;}

		u32 PlayerId; 
		
		GTA::Ped^ GetPlayerPed();

		property Scripting::Player Player::Base
		{
			Scripting::Player get();
			void set(Scripting::Player pl);
		}

		virtual property GTA::Vector3^ Player::Coordinates
		{
			GTA::Vector3^ get() override;
			void set(GTA::Vector3^ pos) override;
		}

		virtual property f32 Heading
		{
			f32 get() override;
			void set(f32 heading) override;
		};

		property u32 Health
		{
			u32 get();
			void set(u32 health);
		};

		property GTA::eModel Model
		{
			GTA::eModel get();
			void set(GTA::eModel model);
		};

		GTA::Vector3^ GetAimCoordinates(float distance);
	};
};